(function( factory ) {
	if ( typeof define === "function" && define.amd ) {
		define( ["jquery", "../jquery.validate"], factory );
	} else if (typeof module === "object" && module.exports) {
		module.exports = factory( require( "jquery" ) );
	} else {
		factory( jQuery );
	}
}(function( $ ) {

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
 */
$.extend( $.validator.messages, {
	required: "这是必填字段",
	remote: "请修正此字段",
	email: "请输入有效的电子邮件地址",
	url: "请输入有效的网址",
	date: "请输入有效的日期",
	dateISO: "请输入有效的日期 (YYYY-MM-DD)",
	number: "请输入有效的数字",
	digits: "只能输入数字",
	creditcard: "请输入有效的信用卡号码",
	equalTo: "你的输入不相同",
	extension: "请输入有效的后缀",
	maxlength: $.validator.format( "最多可以输入 {0} 个字符" ),
	minlength: $.validator.format( "最少要输入 {0} 个字符" ),
	rangelength: $.validator.format( "请输入长度在 {0} 到 {1} 之间的字符串" ),
	range: $.validator.format( "请输入范围在 {0} 到 {1} 之间的数值" ),
	max: $.validator.format( "请输入不大于 {0} 的数值" ),
	min: $.validator.format( "请输入不小于 {0} 的数值" )
} );
jQuery.validator.setDefaults({
    submitHandler : function(form) {
    	var submitBtn = $("button[type='submit']",$(form));
    	if(submitBtn.length>0){
    		submitBtn.attr("disabled","disabled").html("<span class='fa fa-spinner fa-pulse'></span> 正在提交...");
    	}
        form.submit();
    }
});
}));
//////////////////验证相关////////////////////////////////
//验证价格 对应数据库number(10,2) 8位正整数，2位小数点 
//需要关闭输入法 style="ime-mode: Disabled"仅支持IE
function regPrice(obj)
{
	var reg =/^((\d{0,8})|(\d{0,8}\.\d{0,2}))$/;
	var inputStr=String.fromCharCode(event.keyCode);
	var docSel = document.selection.createRange();
	if (docSel.parentElement().tagName != "INPUT") return false;
	oSel = docSel.duplicate();
	oSel.text = "";
	var srcRange = obj.createTextRange();
	oSel.setEndPoint("StartToStart", srcRange);
	var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length);
	return reg.test(str);
}
/**
* 验证数量（整数）
* @param {Object} obj
* @return {TypeName} 
*/
function regNum(obj)
{
	var reg =/^([1-9]\d{0,7})$/;
	var inputStr=String.fromCharCode(event.keyCode);
	var docSel = document.selection.createRange();
	if (docSel.parentElement().tagName != "INPUT") return false;
	oSel = docSel.duplicate();
	oSel.text = "";
	var srcRange = obj.createTextRange();
	oSel.setEndPoint("StartToStart", srcRange);
	var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length);
	return reg.test(str);
}
/**
* 验证是否是身份证号
* @param num
* @returns {Boolean}
*/
function checkidcard(num) {  
var len = num.length, re;  
if (len == 15)  
    re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);  
else if (len == 18)  
    re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);  
else {  
    //alert("请输入15或18位身份证号,您输入的是 "+len+ "位");     
    return false;  
}  
var a = num.match(re);  
if (a != null) {  
    if (len == 15) {  
        var D = new Date("19" + a[3] + "/" + a[4] + "/" + a[5]);  
        var B = D.getYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];  
    } else {  
        var D = new Date(a[3] + "/" + a[4] + "/" + a[5]);  
        var B = D.getFullYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];  
    }  
    if (!B) {  
        //alert("输入的身份证号 "+ a[0] +" 里出生日期不对！");     
        return false;  
    }  
}  

return true;  
}
//添加验证方法 (日期是当前时间之后的)    
jQuery.validator.addMethod("flutredate", function (value, element) {  
	var now = new Date();
	var nowdata = now.getFullYear()+"-"+((now.getMonth()+1)<10?"0":"")+(now.getMonth()+1)+"-"+(now.getDate()<10?"0":"")+now.getDate();
	var date1 = new Date(Date.parse(nowdata.replace("-", "/")));
	var date2 = new Date(Date.parse(value.replace("-", "/")));
return date1 < date2;
}, "请选择当前日期之后的日期"); 
//添加验证方法 (身份证号码验证)    
jQuery.validator.addMethod("isIdCardNo", function (value, element) {  
return this.optional(element) || checkidcard(value);  
}, "请正确输入您的身份证号码");  
//验证价格 对应数据库number(10,2) 最多8位正整数和2位小数点 
jQuery.validator.addMethod("isPrice", function (value, element) {
	var reg = /^((\d{0,8})|(\d{0,8}\.\d{0,2}))$/;
	return this.optional(element) || (reg.test(value));
}, "请输入合法的价格,最大支持8位正整数和2位小数,如：1.20");
//验证价格 对应数据库number(10,2) 最多8位正整数和2位小数点 
jQuery.validator.addMethod("isPriceTwo", function (value, element) {
	var reg = /^((-?\d{0,8})|(-?\d{0,8}\.\d{0,2}))$/;
	
	return this.optional(element) || ((reg.test(value))&&(value !='-'));
}, "请输入合法的价格,最大支持8位整数和2位小数,如：1.20");

//验证价格 对应数据库number(10,1) 最多8位正整数和1位小数点 
jQuery.validator.addMethod("isPriceOne", function (value, element) {
	var reg = /^((\d{0,8})|(\d{0,8}\.\d{0,1}))$/;
	return this.optional(element) || (reg.test(value));
}, "请输入合法的价格,最大支持8位正整数和1位小数点,如：1.2");
//验证数量 对应数据库number(5,2) 最多3位正整数和2位小数点 
jQuery.validator.addMethod("isPoint", function (value, element) {
	var reg = /^((\d{0,3})|(\d{0,3}\.\d{0,2}))$/;
	return this.optional(element) || (reg.test(value));
}, "请输入合法的价格,最大支持3位正整数和2位小数点,如：1.20");

//验证数量 对应数据库number(5,1) 最多4位正整数和1位小数点
jQuery.validator.addMethod("isPointOne", function (value, element) {
    var reg = /^((\d{0,4})|(\d{0,4}\.\d{0,1}))$/;
    return this.optional(element) || (reg.test(value));
}, "请输入合法的价格,最大支持4位正整数和1位小数点,如：1.2");
/**
* 正整数验证
*/
jQuery.validator.addMethod("isPositiveInteger", function (value, element) {
	var num =  /^\d{0,8}$/;
	return this.optional(element) || (num.test(value));
}, "请输入不小于0的整数,最大支持8位正整数");
/**
* 添加一个用于验证大于0的正整数的方法 
*/
jQuery.validator.addMethod("positiveinteger", function(value, element) {
var aint=parseInt(value); 
return this.optional(element)||(aint>0&& (aint+"")==value);
}, "请输入大于0的整数"); 
/**
* 整数验证
*/
jQuery.validator.addMethod("isInteger", function (value, element) {
	var num =  /^(-?\d+|\d*)$/;
	return this.optional(element) || (num.test(value));
}, "请输入整数");

/**
 * 验证数字 对应数据库number(10,3) 最多7位正整数和3位小数点 ,非0
 */
jQuery.validator.addMethod("isPriceThreeNoZero", function (value, element) {
    var reg = /^((\d{0,7})|(\d{0,7}\.\d{0,3}))$/;
    return this.optional(element) || ((reg.test(value)&&value!=0));
}, "请输入大于0的数字,最大支持7位正整数和3位小数,如：1.333");
   
jQuery.validator.addMethod("isNormalName",function(value, element) {
	return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);}, 
	"请不要输入除中文字、英文字母、数字和下划线以外的字符"
); 

jQuery.validator.addMethod("isNum", function (value, element) {
	var num = /^(\+|-)?(0|[1-9]\d*)(\.\d*[0-9])?$/;
	return this.optional(element) || (num.test(value));
}, "请输入数字,如：1");

jQuery.validator.addMethod("isChinese", function (value, element) {
	 var reg = /[\u4E00-\u9FA5]/g;
	return this.optional(element) || (reg.test(value));
}, "请输入中文");
jQuery.validator.addMethod("isNotAddr", function (value, element) {
	var reg=/[>< ]/;
//	alert(value);
	return this.optional(element) || (!reg.test(value));
}, "请不要输入<、>、空格");
jQuery.validator.addMethod("requiredImg", function (value, element) {
	 var reg = "file/a.png";
	return value==reg;
}, "请不要输入中文");

jQuery.validator.addMethod("isUserName", function (value, element) {
	var reg=/^([0-9a-zA-Z_])*$/;
	return this.optional(element) || (reg.test(value));
}, "请不要输入除英文字母、数字和下划线以外的字符");

jQuery.validator.addMethod("isbusiLicense", function (value, element) {
    var num = value.length;
    var flag = true;
    if(num == 18){
        var reg=/^[0-9A-Z]{18}$/;
        flag = reg.test(value);
	}else if(num == 15){
        var reg=/^[0-9A-Z]{15}$/;
        flag = reg.test(value);
	}else{
        flag = false;
	}
    return this.optional(element) || flag;
}, "请输入15或18位数字或大写英文字母");
jQuery.validator.addMethod("isNumOrLetter", function (value, element) {
    var reg=/^([0-9a-zA-Z])*$/;
    return this.optional(element) || (reg.test(value));
}, "只能输入英文字母和数字");
//正常电话号码验证
jQuery.validator.addMethod("isPhone", function (value, element) {
	var tel = /^(\d{3,4}-?)?\d{7,9}$/g;
	return this.optional(element) || (tel.test(value));
}, "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u8054\u7cfb\u7535\u8bdd");
/*手机号码验证，由于目前手机号码拓展速度快，故放开查询条件，
	*手机号码只验证以1开头的十一位数字即为合法手机
*/
jQuery.validator.addMethod("isSim", function (value, element) {
	var sim = /^1\d{10}$/g;
	return this.optional(element) || (sim.test(value));
}, "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7\u7801");

/*联系方式验证，可以是电话号码，也可以是手机号码
	*手机号码只验证以1开头的十一位数字即为合法手机
	* 电话号码
*/
jQuery.validator.addMethod("isContact", function (value, element) {
	var sim = /^1\d{10}$/g;
	var tel = /^(\d{3,4}-?)?\d{7,9}$/g;
	return this.optional(element) || (sim.test(value))|| (tel.test(value));
}, "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u6216\u56fa\u8bdd\u53f7\u7801");
/**
* 0-100百分比
*/
jQuery.validator.addMethod("isRatio", function (value, element) {
var num = Number(value);
var reg = /^((\d{0,8})|(\d{0,8}\.\d{0,2}))$/;
return this.optional(element) || ((num<=100&&num>=0)&&(reg.test(value)));
}, "请输入范围在 0 到 100之间的数值（最多2位小数）");

/**
* 动态最小值比较
*/
jQuery.validator.addMethod("minTo", function (value, element,param) {
var minNum = $(param).val();
return this.optional(element) || $.trim(minNum)==""||value >= Number(minNum);
});

/**
* 动态最大值比较
*/
jQuery.validator.addMethod("maxTo", function (value, element,param) {
var maxNum = $(param).val();
return this.optional(element) || $.trim(maxNum)==""||value <= Number(maxNum);
});
/**
* 动态最小值比较(不等于)
*/
jQuery.validator.addMethod("minTo2", function (value, element,param) {
var minNum = $(param).val();
return this.optional(element) || $.trim(minNum)==""||value > Number(minNum);
});
/**
 * 动态最小值1.25倍比较(不等于)
 */
jQuery.validator.addMethod("minTo3", function (value, element,param) {
    var minNum = $(param).val();
    return this.optional(element) || $.trim(minNum)==""||value > Number(minNum)*1.25;
});
/**
* 动态最大值比较(不等于)
*/
jQuery.validator.addMethod("maxTo2", function (value, element,param) {
var maxNum = $(param).val();
return this.optional(element) || $.trim(maxNum)==""||value < Number(maxNum);
});

//验证价格 对应数据库number(10,2) 最多8位正整数和2位小数点 ,非0
jQuery.validator.addMethod("isPriceNoZero", function (value, element) {
	var reg = /^((\d{0,8})|(\d{0,8}\.\d{0,2}))$/;
	return this.optional(element) || ((reg.test(value)&&value!=0));
}, "请输入大于0的合法金额,最大支持8位正整数和2位小数,如：1.20");
/**
* 动态日期比较
*/
jQuery.validator.addMethod("dateMaxTo", function (value, element,param) {
var maxDate = $(param).val();
var time1 = new Date(maxDate.replace("-","/").replace("-","/"));
var time2 = new Date(value.replace("-","/").replace("-","/"));
return this.optional(element) || $.trim(maxDate)==""|| time2 >= time1;
});
/**
* 动态日期比较当前时间
*/
jQuery.validator.addMethod("dateMaxToNow", function (value, element) {
var time1 = new Date();
var time2 = new Date(value.replace("-","/").replace("-","/"));
return this.optional(element) || time2 >= time1;
});

//6~12位数字、字母和_
jQuery.validator.addMethod("isPass", function (value, element) {
	var reg = /^[0-9a-zA-Z_]{6,12}$/;
	return this.optional(element) || ((reg.test(value)&&value!=0));
}, "请输入6~12位数字、字母或_");
